//
//  ViewController.m
//  runLoop
//
//  Created by hyl on 16/7/27.
//  Copyright © 2016年 hyl. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    [self timer];
    [self observe];
}

-(void) observe{
    //KVO
    //    [NSRunLoop currentRunLoop] addObserver:<#(nonnull NSObject *)#> forKeyPath:<#(nonnull NSString *)#> options:<#(NSKeyValueObservingOptions)#> context:<#(nullable void *)#>
    //创建observer
    CFRunLoopObserverRef observer=CFRunLoopObserverCreateWithHandler(kCFAllocatorDefault, kCFRunLoopAllActivities, YES, 0, ^(CFRunLoopObserverRef observer, CFRunLoopActivity activity) {
        NSLog(@"activity-- %zd",activity);
    });
    //添加观察者：监听RunLoop的状态
    CFRunLoopAddObserver(CFRunLoopGetCurrent(), observer, kCFRunLoopDefaultMode);
    //释放Observer
    CFRelease(observer);
    
    //CF的内存管理（Core Foundation）
    //1.凡是带有Create、Copy、Retain等字眼的函数，创建出来的对象，都需要在最后做一次release
    // 比如CFRunLoopObserverCreate
    //2.release函数：CFRelease(对象);
}

#pragma  mark - timer
-(void) timer{
    //    [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
    NSTimer *timer=[NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(run) userInfo:nil repeats:YES];
    //NSDefaultRunLoopMode(App的默认Mode，通常主线程是在这个Mode下运行)
    //NSRunLoopCommonModes(App的默认Mode，通常主线程是在这个Mode下运行)
    //UITrackingRunLoopMode(在刚启动 App 时第进入的第一个 Mode，启动完成后就不再使用)
    //MODＥ还有其它的模式，（两种）不用程序员自己设置，上面三种：NSRunLoop每一次只能在一种模式下执行，模式会切换
//    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
//    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:UITrackingRunLoopMode];
}

-(void) run{
    NSLog(@"1111111111");
}

@end
